#!/usr/bin/env python
# -*- coding:utf-8 -*-
# @FileName  :1.11 tcp文件传输服务端.py
# @Time      :2020/7/12 22:18
# @Author    :亮亮
# @说明       :tcp文件传输服务端
# @总结       :
import socket


def send_file_to_client(new_client, client_addr):
    """

    :param new_client: 接收的服务端对象
    :param client_addr: 接收的服务端的地址
    :return:
    """
    # 1.接收客户端的请求文件
    file_name = new_client.recvfrom(1024)[0].decode("utf-8")
    print("客户端{}要下载的文件为:{}".format(str(client_addr), file_name))

    # 创建变量，用来判断文件是否为空
    file_content = None

    # 2.根据请求文件名打开服务端的文件
    try:
        f = open(file_name, "rb")
        file_content = f.read()
        f.close()
    except Exception as e:
        print("没有要下载的文件:{}".format(file_name))

    if file_content:
        # 3.发送数据给客户端
        new_client.send(file_content)
        print("发送成功")


def main():
    # 创建套接字
    tcp_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    # 绑定本地信息
    server_addr = ("", 9091)
    tcp_server.bind(server_addr)

    # 将服务器改为监听模式
    tcp_server.listen(128)

    while True:
        # 等待用户链接
        print("----正在等待用户链接----")
        new_client, client_addr = tcp_server.accept()
        print("----用户已经链接----")
        new_client.send("----你已链接上服务器----".encode("utf-8"))

        # 进行本次服务
        # 调用发送文件函数，完成对客户端的发送
        send_file_to_client(new_client, client_addr)

        # 关闭本次服务
        new_client.close()

    # 关闭服务器
    tcp_server.close()


if __name__ == '__main__':
    main()
